home *** CD-ROM | disk | FTP | other *** search
/ Primal 3D Interactive Se…es (Professional Edition) / Interactive Shoulder CD / SHOULDER.bin / shared / DBUTILS.LUA < prev    next >
Text File  |  2000-01-28  |  14KB  |  404 lines

  1. -- dbutils.lua
  2. -- for Shoulder
  3.  
  4. resMap = {}
  5.  
  6. resMap["490"] = {c = "labeltextanat"}
  7. resMap["491"] = {c = "labeltextbio"}
  8. resMap["492"] = {c = "labeltextpath"}
  9. resMap["483"] = {c = "helptext"}
  10.  
  11. resMap["38600"] = {c = "mraxial", s = "38600010", cs = "getMrModelLink('ag000','lvl',%s)"}
  12. resMap["38601"] = {c = "mrsagittal", s = "38601010", cs = "getMrModelLink('ba000','lvl',%s)"}
  13. resMap["38602"] = {c = "mrcoronal", s = "38602010", cs = "getMrModelLink('ca000','lvl',%s)"}
  14. resMap["3861"] = {c = "stollerslides"}
  15. resMap["3862"] = {c = "surfvideos"}
  16. resMap["3863"] = {c = "dissslides"}
  17. resMap["3864"] = {c = "bioslidevid"}
  18. resMap["3865"] = {c = "clinslides"}
  19.  
  20. resMap["a"] = {c = "csaxial", s = "ag021", t = "getSliceModelTitle('Axial Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", mr = "getModelMrLink(38600010,%s)", th = "model.png"}
  21. resMap["b"] = {c = "cssagittal", s = "ba000", t = "getSliceModelTitle('Sagittal Oblique Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", mr = "getModelMrLink(38601010,%s)", th = "model.png"}
  22. resMap["c"] = {c = "cscoronal", s = "ca019", t = "getSliceModelTitle('Coronal Oblique Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", mr = "getModelMrLink(38602010,%s)", th = "model.png"}
  23.  
  24. resMap["s"] = {c = "model0", s = "sa035", t = "getModelTitle('Thorax and Arm Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  25. resMap["t"] = {c = "model1", s = "ta035", t = "getModelTitle('Arm Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  26. resMap["u"] = {c = "model2", s = "ua035", t = "getModelTitle('Elbow Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  27. resMap["v"] = {c = "model3", s = "va035", t = "getModelTitle('Shoulder Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  28. resMap["w"] = {c = "model4", s = "wa017", t = "getModelTitle('Rotator Cuff Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  29. resMap["x"] = {c = "model5", s = "xa008", t = "getModelTitle('Shoulder Girdle Model', %s)", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  30.  
  31. resMap["za"] = {c = "modelx0", s = "za000", t = "'Neurovascular Supply (Shoulder)'", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  32. resMap["zb"] = {c = "modelx1", s = "zb000", t = "'Neurovascular Supply (Arm)'", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  33. resMap["zc"] = {c = "modelx2", s = "zc000", t = "'Shoulder Joint Model'", i = "getModelImage(%s)", o = "getModelOverlay(%s)", th = "model.png"}
  34.  
  35. -----------------------------------
  36.  
  37. seqGetModelIndexPos = function (resId)
  38.   local g, l, num = splitModelResId(resId)
  39.     return tonumber(num)
  40. end
  41.  
  42. seqMakeResModelIndex = function (resId, pos)
  43.   local group, subGrp, i = splitModelResId(resId)
  44.   return makeModelResId(group, subGrp, pos)
  45. end
  46.  
  47. seqGetModelSubGrpPos = function (resId)
  48.   local g, subGrp, n = splitModelResId(resId)
  49.     return strbyte(subGrp) - strbyte('a')
  50. end
  51.  
  52. seqMakeResModelSubGrp = function (resId, pos)
  53.   local group, s, idx = splitModelResId(resId)
  54.   return makeModelResId(group, strchar(strbyte('a') + pos), idx)
  55. end
  56.  
  57. seqGetSlicePos = function (resId, base)
  58.   return (resId - base) / 10
  59. end
  60.  
  61. seqMakeResSlice = function (resId, pos, base)
  62.   return pos * 10 + base
  63. end
  64.  
  65. seqGetViewPos = function (resId, viewTbl)
  66.  
  67.   local checkTable = function (idx, val)
  68.       if strfind(%resId, val, 1, 1) == 1 then
  69.           return idx - 1
  70.         else
  71.           return nil
  72.         end
  73.     end
  74.     
  75.   local pos = foreach(viewTbl, checkTable)
  76.     
  77.     if not pos then
  78.       return nil
  79.     else
  80.       return pos
  81.     end
  82.     
  83. end
  84.  
  85. seqMakeResView = function (resId, pos, viewTbl)
  86.     return getStartLink(viewTbl[pos+1])
  87. end
  88.  
  89. seqGetPrfxPos = function (resId, prfxTbl)
  90.  
  91.   local checkTable = function (idx, val)
  92.       if strfind(%resId, val, 1, 1) == 1 then
  93.           return idx - 1
  94.         else
  95.           return nil
  96.         end
  97.     end
  98.     
  99.   local pos = foreach(prfxTbl, checkTable)
  100.     
  101.     if not pos then
  102.       return nil
  103.     else
  104.       return pos
  105.     end
  106.     
  107. end
  108.  
  109. seqMakePrfx = function (resId, pos, prfxTbl)
  110.     return prfxTbl[pos+1]..strsub(resId, strlen(prfxTbl[pos+1])+1)
  111. end
  112.  
  113.  
  114. mainViewSeq = {"s", "t", "u", "v", "w", "x", "za", "zb", "zc"}
  115. radViewSeq = {"a", "b", "c", "v"}
  116. textTypeSeq = {"490", "491", "492"}
  117. layerTitles = {"Layer 1", "Layer 2", "Layer 3", "Layer 4", "Layer 5", "Layer 6", "Layer 7", "Layer 8", "Layer 9", "Layer 10", "Layer 11", "Layer 12", "Layer 13", "Layer 14", "Arteries in overview", "Veins, in overview", "Nerves, in overview", "Neurovascular structures", "Surface Anatomy", "Cutaneous distribution", "Dermatome distribution"}
  118.  
  119. seqTable = {
  120.  
  121.     {name = "texttype", inFunc = "seqGetPrfxPos(%s, textTypeSeq)", posFunc = function (resId) return seqGetPrfxPos(resId, textTypeSeq) end, makeFunc = function (resId,pos) return seqMakePrfx(resId,pos,textTypeSeq) end, len = getn(textTypeSeq)},
  122.  
  123.     {name = "mainview", inFunc = "seqGetViewPos(%s, mainViewSeq)", posFunc = function (resId) return seqGetViewPos(resId, mainViewSeq) end, makeFunc = function (resId,pos) return seqMakeResView(resId,pos,mainViewSeq) end, len = getn(mainViewSeq)},
  124.     {name = "radview", inFunc = "seqGetViewPos(%s, radViewSeq)", posFunc = function (resId) return seqGetViewPos(resId, radViewSeq) end, makeFunc = function (resId,pos) return seqMakeResView(resId,pos,radViewSeq) end, len = getn(radViewSeq)},
  125.  
  126.   {name = "main", inFunc = "beginsWith(%s, '38600')", posFunc = function (resId) return seqGetSlicePos(resId, 38600010) end, makeFunc =  function (resId,pos) return seqMakeResSlice(resId,pos,38600010) end, len = 22},
  127.   {name = "main", inFunc = "beginsWith(%s, '38601')", posFunc = function (resId) return seqGetSlicePos(resId, 38601010) end, makeFunc =  function (resId,pos) return seqMakeResSlice(resId,pos,38601010) end, len = 19},
  128.   {name = "main", inFunc = "beginsWith(%s, '38602')", posFunc = function (resId) return seqGetSlicePos(resId, 38602010) end, makeFunc =  function (resId,pos) return seqMakeResSlice(resId,pos,38602010) end, len = 20},
  129.     
  130.   {name = "main", inFunc = "beginsWith(%s, 'a')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 7, rev = 1},
  131.   {name = "lvl", inFunc = "beginsWith(%s, 'a')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 22, rev = 1},
  132.   {name = "main", inFunc = "beginsWith(%s, 'b')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 7},
  133.   {name = "lvl", inFunc = "beginsWith(%s, 'b')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 19},
  134.   {name = "main", inFunc = "beginsWith(%s, 'c')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 7, rev = 1},
  135.   {name = "lvl", inFunc = "beginsWith(%s, 'c')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 20, rev = 1},
  136.     
  137.   {name = "main", inFunc = "beginsWith(%s, 's')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 36, loop = 1, rev = 1},
  138.     {name = "lvl", inFunc = "beginsWith(%s, 's')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 21, pttl = layerTitles, sfclPos = 13},
  139.   {name = "main", inFunc = "beginsWith(%s, 't')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 36, loop = 1, rev = 1},
  140.   {name = "lvl", inFunc = "beginsWith(%s, 't')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 18, pttl = layerTitles, sfclPos = 13},
  141.   {name = "main", inFunc = "beginsWith(%s, 'u')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 36, loop = 1, rev = 1},
  142.   {name = "lvl", inFunc = "beginsWith(%s, 'u')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 18, pttl = layerTitles, sfclPos = 13},
  143.   {name = "main", inFunc = "beginsWith(%s, 'v')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 36, loop = 1, rev = 1},
  144.   {name = "lvl", inFunc = "beginsWith(%s, 'v')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 18, pttl = layerTitles, sfclPos = 13},
  145.   {name = "main", inFunc = "beginsWith(%s, 'w')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 18, rev = 1},
  146.   {name = "lvl", inFunc = "beginsWith(%s, 'w')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 18, pttl = layerTitles, sfclPos = 13},
  147.   {name = "main", inFunc = "beginsWith(%s, 'x')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 10, rev = 1},
  148.   {name = "lvl", inFunc = "beginsWith(%s, 'x')", posFunc = seqGetModelSubGrpPos, makeFunc = seqMakeResModelSubGrp, len = 18, pttl = layerTitles, sfclPos = 13},
  149.   {name = "main", inFunc = "beginsWith(%s, 'za')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 11},
  150.   {name = "main", inFunc = "beginsWith(%s, 'zb')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 32},
  151.   {name = "main", inFunc = "beginsWith(%s, 'zc')", posFunc = seqGetModelIndexPos, makeFunc = seqMakeResModelIndex, len = 7}
  152.     
  153. }
  154.  
  155. -----------------------------------
  156.  
  157. getSeqAttrib = function (resId, seqName, op, arg1)
  158.  
  159.   local checkMatch = function (idx, seqInfo)
  160.     if seqInfo.name ~= %seqName then
  161.           return nil
  162.         end
  163.       if not dostring(format("return "..seqInfo.inFunc, "'"..%resId.."'")) then
  164.           return nil
  165.         end
  166.         return seqInfo
  167.     end
  168.     
  169.   local seqInfo = foreachi(seqTable, checkMatch)
  170.     
  171.     if not seqInfo then return nil end
  172.     
  173.     if op == 'atrb' then return seqInfo[arg1] end
  174.  
  175.   local pos = call(seqInfo.posFunc, {resId})
  176.     if seqInfo.rev then
  177.       pos = seqInfo.len - 1 - pos
  178.     end
  179.     
  180.     if op == 'pos' then return pos end
  181.     
  182.     if op == 'pttl' then
  183.       if not seqInfo.pttl then return "" end
  184.       return seqInfo.pttl[pos+1]    
  185.     end
  186.     
  187.     local newPos = pos
  188.     if op == 'next' then
  189.       newPos = pos + 1
  190.     elseif op == 'prev' then
  191.       newPos = pos - 1
  192.     elseif op == 'at' then
  193.       newPos = arg1
  194.     else
  195.       return nil
  196.     end
  197.  
  198.     if newPos < 0 then
  199.       if seqInfo.loop then 
  200.           newPos = seqInfo.len - 1
  201.         else
  202.           newPos = -1
  203.         end
  204.     elseif newPos >= seqInfo.len then
  205.       if seqInfo.loop then 
  206.           newPos = 0
  207.         else
  208.           newPos = -1
  209.         end
  210.     end
  211.  
  212.   if newPos == -1 then
  213.       return ""
  214.     end
  215.  
  216.     if seqInfo.rev then
  217.       newPos = seqInfo.len - 1 - newPos
  218.     end
  219.     return call(seqInfo.makeFunc, {resId, newPos})
  220.     
  221. end
  222.  
  223. beginsWith = function (str, start)
  224.     return (strfind(str, start, 1, 1) == 1)
  225. end
  226.  
  227. inRange = function (val, min, max)
  228.   val = tonumber(val)
  229.     if not val then return nil end
  230.   return ((val >= min) and (val <= max))
  231. end
  232.  
  233. findResAttrib = function (resId, attribId)
  234.  
  235.   local checkMatch = function (pattern, attribs)
  236.         if beginsWith(%resId, pattern) then
  237.         return attribs[%attribId]
  238.         end
  239.         return nil
  240.     end
  241.     
  242.   result = foreach(resMap, checkMatch)
  243.     
  244.     if not result then
  245.       result = ""
  246.     end
  247.     
  248.     return result
  249.  
  250. end
  251.  
  252.  
  253. splitModelResId = function (resId)
  254.   -- return group, layer, number
  255.   return strsub(resId, 1, 1), strsub(resId, 2, 2), strsub(resId, 3)
  256. end
  257.  
  258. makeModelResId = function (group, layer, number)
  259.   return group..layer..format('%03d', number)
  260. end
  261.  
  262.  
  263. getModelImage = function (resId)
  264.   local group, layer, number = splitModelResId(resId)
  265.     return group.."\\"..layer.."\\s"..group..layer..number..".jpg"
  266. end
  267.  
  268.  
  269. getModelOverlay = function (resId)
  270.   local group, layer, number = splitModelResId(resId)
  271.     return group.."\\"..layer.."\\r"..group..layer..number..".png"
  272. end
  273.  
  274.  
  275. getModelTitle = function (groupTitle, resId)
  276.  
  277.   local layer = strbyte(resId, 2) - strbyte("a") + 1
  278.     
  279.     if layer >= 1 then
  280.       return groupTitle.." (Layer "..layer..")"
  281.     else 
  282.       return groupTitle
  283.     end
  284.  
  285. end
  286.  
  287. getSliceModelTitle = function (groupTitle, resId)
  288.  
  289.   local slice = getSeqPos(resId, "lvl") + 1
  290.  
  291.     if slice >= 1 then
  292.       return groupTitle.." (Slice "..slice..")"
  293.     else 
  294.       return groupTitle
  295.     end
  296.  
  297. end
  298.  
  299. getModelMrLink = function (mrSeqStart, resId)
  300.  
  301.   local pos = getSeqAttrib(resId, "lvl", "pos")
  302.     
  303.     return getSeqAttrib(mrSeqStart, "main", "at", pos)
  304.  
  305. end
  306.  
  307. getMrModelLink = function (csSeqStart, csSeqName, resId)
  308.  
  309.   local pos = getSeqAttrib(resId, "main", "pos")
  310.     
  311.     return getSeqAttrib(csSeqStart, csSeqName, "at", pos)
  312.  
  313. end
  314.  
  315. doAttribScript = function (resId, attribId)
  316.  
  317.     result = ""
  318.     
  319.   script = findResAttrib(resId, attribId)
  320.     
  321.     if script ~= "" then
  322.       result = dostring(format("return "..script, "'"..resId.."'"))
  323.     end
  324.     
  325.     return result
  326.  
  327. end
  328.  
  329. -----------------------------------
  330.  
  331. getTitle = function (resId)
  332.     return doAttribScript(resId, "t")
  333. end
  334.  
  335. getThumb = function (resId)
  336.     return findResAttrib(resId, "th")
  337. end
  338.  
  339. getClass = function (resId)
  340.     return findResAttrib(resId, "c")
  341. end
  342.  
  343. getImage = function (resId)
  344.     return doAttribScript(resId, "i")
  345. end
  346.  
  347. getOverlay = function (resId)
  348.     return doAttribScript(resId, "o")
  349. end
  350.  
  351. getMrLink = function (resId)
  352.     return doAttribScript(resId, "mr")
  353. end
  354.  
  355. getCsLink = function (resId)
  356.     return doAttribScript(resId, "cs")
  357. end
  358.  
  359. getStartLink = function (resId)
  360.     return findResAttrib(resId, "s")
  361. end
  362.  
  363. getSeqLength = function (resId, seqName)
  364.   local result = getSeqAttrib(resId, seqName, "atrb", "len")
  365.     if not result then return 0 end
  366.     return result
  367. end
  368.  
  369. getSeqPos = function (resId, seqName)
  370.   local result = getSeqAttrib(resId, seqName, "pos")
  371.     if not result then return -1 end
  372.     return result
  373. end
  374.  
  375. getSeqPosTitle = function (resId, seqName)
  376.   local result = getSeqAttrib(resId, seqName, "pttl")
  377.     if not result then return "" end
  378.     return result
  379. end
  380.  
  381. getSeqValue = function (resId, seqName, pos)
  382.   local result = getSeqAttrib(resId, seqName, "at", tonumber(pos))
  383.     if not result then return "" end
  384.     return result
  385. end
  386.  
  387. getSeqNext = function (resId, seqName)
  388.   local result = getSeqAttrib(resId, seqName, "next")
  389.     if not result then return "" end
  390.     return result
  391. end
  392.  
  393. getSeqPrev = function (resId, seqName)
  394.   local result = getSeqAttrib(resId, seqName, "prev")
  395.     if not result then return "" end
  396.     return result
  397. end
  398.  
  399. getSeqAttribute = function (resId, seqName, atrbName)
  400.   local result = getSeqAttrib(resId, seqName, "atrb", atrbName)
  401.     if not result then return "" end
  402.     return result
  403. end
  404.